<?php

namespace App\Http\Controllers;

use Endroid\QrCode\QrCode;
use Illuminate\Http\Request;

class PaymentController extends Controller
{
    public function payView()
    {
        // 判断是否是微信内置浏览器
        if (strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger') !== false) {
            $user = session('wechat.oauth_user.default'); // 拿到授权用户资料
            if (!$user) {
                return redirect('get_wechat_user');
            }
        }
        return view('payment.pay_view');
    }

    public function payByWechat($order_id, Request $request)
    {
        $out_trade_no = date('YmdHis');
        $order = [
            'out_trade_no' => $out_trade_no, // 订单编号，需保证在商户端不重复
            'total_fee' => 1, // 与支付宝不同，微信支付的金额单位是分。
            'body'      => '支付 PMD Shop 的订单：'.$out_trade_no, // 订单描述
        ];

        $type = $request->type ?? 'scan';

        switch ($type)
        {
            case 'scan':
                // scan 方法为拉起微信扫码支付
                $wechatOrder = app('wechat_pay')->scan($order);
                // 把要转换的字符串作为 QrCode 的构造函数参数
                $qrCode = new QrCode($wechatOrder->code_url);
                // 将生成的二维码图片数据以字符串形式输出，并带上相应的响应类型
                return response($qrCode->writeString(), 200, ['Content-Type' => $qrCode->getContentType()]);

            case 'mp':

                $order['openid'] = $request->openid;
                return app('wechat_pay')->mp($order);

            case 'app':

            default:
                dd('支付方式错误：$type = ' . $type);
        }

    }

    public function wechatNotify()
    {
        // 校验回调参数是否正确
        $data  = app('wechat_pay')->verify();

        logger('微信支付回调：', json_decode($data, true));

        return app('wechat_pay')->success();
    }

    public function payByAlipay($order_id, Request $request)
    {
        $out_trade_no = date('YmdHis');
        $order = [
            'out_trade_no' => $out_trade_no, // 订单编号，需保证在商户端不重复
            'total_amount' => 0.01, // 订单金额，单位元，支持小数点后两位
            'subject'      => '支付 PMD Shop 的订单：' . $out_trade_no, // 订单标题
        ];

        $type = $request->type ?? 'web';

        switch ($type)
        {
            case 'web':
                // 调用支付宝的网页支付
                return app('alipay')->web($order);
            case 'wap':
                return app('alipay')->wap($order);
            case 'app':
                return app('alipay')->app($order);
            default:
                dd('支付方式错误：$type = ' . $type);
        }
    }

    // 前端回调页面
    public function alipayReturn()
    {
        // 校验提交的参数是否合法
        $data = app('alipay')->verify();
        dd($data);
        return view('payment.pay_return');
    }

    // 服务器端回调
    public function alipayNotify()
    {
        $data = app('alipay')->verify();
        \Log::debug('Alipay notify', $data->all());
    }
}
